﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;
using System.IO;

namespace CppIDE.Core
{

    /// <summary>
    /// A konfigurációt tartalmazó osztály
    /// </summary>
    public class Configuration
    {

        /// <summary>
        /// A fordító elérési útja
        /// </summary>
        private String gccPath = "c:\\CppIDE\\GCC\\";

        /// <summary>
        /// A fordító elérési útja tulajdonság
        /// </summary>
        /// <value>A fordító elérési útja</value>
        public String GccPath
        {
            get
            {
                fixPath();
                return gccPath;
            }
            set
            {
                fixPath();
                gccPath = value;
            }
        }

        /// <summary>
        /// A fordító elérési útjához fűz egy záró backslash-t, ha nem azzal végződik.
        /// </summary>
        private void fixPath()
        {
            if (gccPath != null)
            {
                if (!gccPath.EndsWith("\\"))
                {
                    gccPath = gccPath + "\\";
                }
            }
        }

        /// <summary>
        /// A szerializációhoz használt serializer
        /// </summary>
        static protected XmlSerializer serializer = new XmlSerializer(typeof(Configuration));

        /// <summary>
        /// Menti a konfigurációt a megadott fájlba.
        /// </summary>
        /// <param name="configFile">a célfájl</param>
        public void save(File configFile)
        {
            FileStream stream = new FileStream(configFile.FullPath, FileMode.Create);
            serializer.Serialize(stream, this);
            stream.Close();
        }

        /// <summary>
        /// Betölt egy konfigurációt a megadott fájlból.
        /// </summary>
        /// <param name="configFile">a forrásfájl</param>
        /// <returns>a betöltött konfiguráció (ha nem sikerült, null)</returns>
        public static Configuration open(File configFile)
        {
            Configuration configuration;
            FileStream stream = null;
            try
            {
                stream = new FileStream(configFile.FullPath, FileMode.Open);
                configuration = (Configuration)serializer.Deserialize(stream);
            }
            catch (Exception)
            {
                configuration = null;
            }
            if (stream != null)
            {
                stream.Close();
            }
            return configuration;
        }

    }

}
